package org.japo.java.basics.main;

/*****************************************************************************************
@author José A. Pacheco Ondoño
@version 1.1 - 22/01/2015

Sintaxis:
java ClaseString | more

Este programa sirve para ilustrar la utilización de los métodos de la clase String.
*****************************************************************************************/
public class ClaseString {

    /**************************************************************************************
    Método de entrada al programa
    **************************************************************************************/
    public static void main(String[] arg) {
        // Constantes
        final String TXT1 = "Nuestra vida es la obra de nuestras decisiones";
        final String TXT2 = "Nuestra vida es la única que tenemos";
        final String TXT3 = "     Rodeado de la nada      ";
        final String PREF = "Nuestra";
        final String POST = "tenemos";
        final String INFI = "ra";
        
        // Variables
        int numInt1;
        int numInt2;
        double numDouble;
        char letra1;
        char letra2;
        boolean test;

        // Longitud de la cadena
        System.out.println("La longitud de la frase ...");
        System.out.println("\"" + TXT1 + "\"");
        System.out.println("... es de " + TXT1.length() + " caracteres");

        // Caracter de una posición
        numInt1 = 8;
        System.out.println();
        System.out.println("En la frase ...");
        System.out.println("\"" + TXT1 + "\"");
        System.out.println("... el carácter de la posición ...");
        System.out.println(numInt1);
        System.out.println("... es \'" + TXT1.charAt(numInt1) + "\'");

        // Comparar dos cadenas
        System.out.println();
        System.out.println("Las frases ...");
        System.out.println("Frase1: " + "\"" + TXT1 + "\"");
        System.out.println("Frase2: " + "\"" + TXT2 + "\"");
        if (TXT1.compareTo(TXT2) != 0) {
            System.out.println("... son diferentes");
        } else {
            System.out.println("... son iguales");
        }

        // Comprobar si una cadena empieza por una subcadena
        System.out.println();
        System.out.println("La frase ...");
        System.out.println("\"" + TXT1 + "\"");
        if (TXT1.startsWith(PREF)) {
            System.out.println("... empieza por el prefijo ...");
        } else {
            System.out.println("... no empieza por el prefijo ...");
        }
        System.out.println("\"" + PREF + "\"");

        // Comprobar si una cadena termina por una subcadena
        System.out.println();
        System.out.println("La frase ...");
        System.out.println("\"" + TXT1 + "\"");
        if (TXT1.startsWith(POST)) {
            System.out.println("... termina con el sufijo ...");
        } else {
            System.out.println("... no termina con el sufijo ...");
        }
        System.out.println("\"" + POST + "\"");

        // Calcular la primera posición donde aparece un carácter
        letra1 = 's';
        System.out.println();
        System.out.println("La primera ocasión que en la frase ...");
        System.out.println("\"" + TXT1 + "\"");
        System.out.println("... aparece el caracter ...");
        System.out.println("\'" + letra1 + "\'");
        System.out.println("... es en la posición " + TXT1.indexOf(letra1));

        // Calcular la última posición donde aparece un carácter
        letra1 = 's';
        System.out.println();
        System.out.println("La última ocasión que en la frase ...");
        System.out.println("\"" + TXT1 + "\"");
        System.out.println("... aparece el caracter ...");
        System.out.println("\'" + letra1 + "\'");
        System.out.println("... es en la posición " + TXT1.lastIndexOf(letra1));

        // Calcular la primera posición en la que aparece una subcadena
        System.out.println();
        System.out.println("La primera ocasión que en la frase ...");
        System.out.println("\"" + TXT1 + "\"");
        System.out.println("...  aparece la subcadena ...");
        System.out.println("\"" + INFI + "\"");
        System.out.println("... es en la posición " + TXT1.indexOf(INFI));

        // Calcular la última posición en la que aparece una subcadena
        System.out.println();
        System.out.println("La última ocasión que en la frase ...");
        System.out.println("\"" + TXT1 + "\"");
        System.out.println("...  aparece la subcadena ...");
        System.out.println("\"" + INFI + "\"");
        System.out.println("... es en la posición " + TXT1.lastIndexOf(INFI));

        // Obtener una subcadena cortando una cadena a partir de una posición
        numInt1 = 12;
        System.out.println();
        System.out.println("Cortando la frase ...");
        System.out.println("\"" + TXT1 + "\"");
        System.out.println("... a partir de la posición ...");
        System.out.println(numInt1);
        System.out.println("... se obtiene ...");
        System.out.println("\"" + TXT1.substring(numInt1) + "\"");

        // Obtener una subcadena entre posiciones
        numInt1 = 12;
        numInt2 = 24;
        System.out.println();
        System.out.println("Cortando la frase ...");
        System.out.println("\"" + TXT1 + "\"");
        System.out.println("... desde la posición ...");
        System.out.println(numInt1);
        System.out.println("... hasta la posición ...");
        System.out.println(numInt2);
        System.out.println("... se obtiene ...");
        System.out.println("\"" + TXT1.substring(numInt1, numInt2) + "\"");

        // Reemplazar todas las apariciones de un carácter por otro
        letra1 = 'r';
        letra2 = 'd';
        System.out.println();
        System.out.println("Aplicando la sustitución del carácter ...");
        System.out.println("\'" + letra1 + "\'");
        System.out.println("... por el carácter ...");
        System.out.println("\'" + letra2 + "\'");
        System.out.println("... en la frase ...");
        System.out.println("\"" + TXT1 + "\"");
        System.out.println("... se obtiene ...");
        System.out.println("\"" + TXT1.replace(letra1, letra2) + "\"");

        // Convertir la cadena a minúsculas
        System.out.println();
        System.out.println("Cambiando los caracteres de la frase ...");
        System.out.println("\"" + TXT1 + "\"");
        System.out.println("... a minúsculas se obtiene ...");
        System.out.println("\"" + TXT1.toLowerCase() + "\"");

        // Convertir la cadena a mayúsculas
        System.out.println();
        System.out.println("Cambiando los caracteres de la frase ...");
        System.out.println("\"" + TXT1 + "\"");
        System.out.println("... a mayúsculas se obtiene ...");
        System.out.println("\"" + TXT1.toUpperCase() + "\"");

        // Eliminar espacios a izquierda y derecha
        System.out.println();
        System.out.println("La frase ...");
        System.out.println("\"" + TXT3 + "\"");
        System.out.println("... sin espacios por los extremos queda ...");
        System.out.println("\"" + TXT3.trim() + "\"");

        // Pasar de boolean a String
        test = true;
        System.out.println();
        System.out.println("El valor lógico ...");
        System.out.println(test);
        System.out.println("... se convierte en la cadena ...");
        System.out.println("\"" + String.valueOf(test) + "\"");

        // Pasar de caracter a String
        letra1 = '*';
        System.out.println();
        System.out.println("El caracter ...");
        System.out.println("\'" + letra1 + "\'");
        System.out.println("... se convierte en la cadena ...");
        System.out.println("\"" + String.valueOf(letra1) + "\"");

        // Pasar de entero a String
        numInt1 = 12345;
        System.out.println();
        System.out.println("El número entero ...");
        System.out.println(numInt1);
        System.out.println("... se convierte en la cadena ...");
        System.out.println("\"" + String.valueOf(numInt1) + "\"");

        // Pasar de real a String
        numDouble = 123.456789;
        System.out.println();
        System.out.println("El número real ...");
        System.out.println(numDouble);
        System.out.println("... se convierte en la cadena ...");
        System.out.println("\"" + String.valueOf(numDouble) + "\"");
    }
}